package com.laamella.syntherface.synths.alesis.micron.model;

import com.laamella.syntherface.synths.midi.MidiInterface;
import com.laamella.syntherface.synths.models.NrpnParameterModel;
import com.laamella.syntherface.synths.models.ParameterType;

/**
 * Ion only, so ignored in the rest of the software. The Ion has a nice
 * interface anyway.
 */
public class Arpeggiator {
	public final NrpnParameterModel pattern;
	public final NrpnParameterModel tempoMultiplier;
	public final NrpnParameterModel length;
	public final NrpnParameterModel octaveRange;
	public final NrpnParameterModel octaveSpan;
	public final NrpnParameterModel noteOrder;
	public final NrpnParameterModel enabled;
	public final NrpnParameterModel programTempo;

	public Arpeggiator(MidiInterface midiInterface) {
		pattern = new NrpnParameterModel(
				"arpeggiator pattern",
				midiInterface,
				512,
				new ParameterType.List(
						"*random*, ant march, teletype, acid bass, spitter, samba, chemical, bodiddle, hats on, hats off, rave stomp, carnival, stutter, a three and a four, samba march, skip to this, skittering, pipeline, fanfare, swinging, chikka-chikka, fee oh fee, robo-shuffle, deliberate, morse code, hit the 4, heart beep, perka, reville, vari-poly, tango, hesitant"));
		tempoMultiplier = new NrpnParameterModel("arpeggiator tempo multiplier", midiInterface, 513,
				new ParameterType.List("1/4, 1/3, 1/2, 1, 2, 3, 4"));
		length = new NrpnParameterModel("arpeggiator length", midiInterface, 514, new ParameterType.List(
				"2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16"));
		octaveRange = new NrpnParameterModel("arpeggiator octave range", midiInterface, 515, new ParameterType.IntegerRange(0, 4));
		octaveSpan = new NrpnParameterModel("arpeggiator octave span", midiInterface, 516, new ParameterType.List("up, down, centered"));
		noteOrder = new NrpnParameterModel("arpeggiator note order", midiInterface, 517, new ParameterType.List(
				"forward, reverse, trigger, r-n-r in, r-n-r x, oct jump"));
		enabled = new NrpnParameterModel("arpeggiator enabled", midiInterface, 518, new ParameterType.List("on, off, latch"));
		programTempo = new NrpnParameterModel("arpeggiator program tempo", midiInterface, 519, new ParameterType.IntegerRange(500, 2500));
	}
}
